这里就不介绍生产者消费者模型了,不懂的就看回进程中的生产者消费者模型
- 使用线程实现生产者消费者模型 -> 线程中没有 JoinableQueue 队列,所以只能通过标识解决不平衡问题
import time
from queue import Queue
from threading import Thread
# 生产者
def producer():
for i in range(50):
q.put('%s.包子' % i) # 直接调用外部的变量, 因为一个进程中的多个线程是可以直接使用这个进程中的数据,且一个py文件就相当于一个进程,不按照线程的说法: 函数本来就可以调用外部的变量和方法,因为作用域链
# 如果有3个消费进程,那么就要往队列添加3个标识数据
q.put(None) # 当生产完数据后再向队列中添加多一个标识数据
q.put(None) # 当生产完数据后再向队列中添加多一个标识数据
# 消费者
def consumer():
while True:
time.sleep(0.5)
bun = q.get() # 直接调用外部的变量, 因为一个进程中的多个线程是可以直接使用这个进程中的数据,且一个py文件就相当于一个进程,不按照线程的说法: 函数本来就可以调用外部的变量和方法,因为作用域链
if bun is None: # 判断拿到的数据是不是等于标识数据,如果等于就说明消费者已经获取完所有生产者的数据,可以结束循环
break
else:
print('吃了%s' % bun)
q = Queue()
# 生产者线程
p = Thread(target=producer)
p.start()
# 消费者线程
c1 = Thread(target=consumer)
c2 = Thread(target=consumer)
c1.start()
c2.start()